package com.component.api.model.param;

import cn.hutool.core.clone.CloneSupport;
import cn.hutool.core.util.StrUtil;
import lombok.Data;

import java.io.Serializable;

/**
 * 描述：
 * 表字段 -元数据
 *
 * @author xianggj
 * @Date 2021/10/12 17:20
 **/
@Data
public class TableColumn extends CloneSupport<TableColumn> implements Serializable {

    private static final long serialVersionUID = -1;

    /**
     * 列名规范
     */
    private static final char[] ILLEGALS = new char[]{'"', '`', '.', '\'', '[', ']', ',', ';'};

    public TableColumn() {
    }

    public TableColumn(String columnName, String dataType) {
        this.columnName = columnName;
        this.dataType = dataType;
    }

    public TableColumn(String columnName, String dataType, Integer length) {
        this.columnName = columnName;
        this.dataType = dataType;
        this.length = length;
    }

    /**
     * 名称
     */
    private String columnName;

    /**
     * 字段类型
     */
    private String dataType;

    /**
     * 别名
     */
    private String alias;

    /**
     * 字段目标类型
     * 用于数据存储
     */
    private String targetType;

    /**
     * 来源端口
     * 表和表做合并时 区分字段来源标记
     */
    private String portName;

    /**
     * 注释
     */
    private String columnComment;

    /**
     * 字段长度
     */
    private Integer length;

    /**
     * 小数
     */
    private Integer floatLength;

    /**
     * 是否主建
     */
    private Boolean columnKey;

    /**
     * 是否允许为空
     */
    private Boolean isNull;

    /**
     * 默认值
     */
    private String defaultValue;


    /**
     * 去除非法字符
     * @return
     */
    public String getColumnName() {
        columnName = StrUtil.removeAll(columnName, ILLEGALS);
        return columnName;
    }

    public Boolean getColumnKey() {
        return columnKey == null ? false : columnKey;
    }
}
